大家好!歡迎來到「Build on Google AI」工程挑戰的第 16 天。
昨天我們成功建立了 PM Agent 與 RD Agent 的交接工作流。但在真實的 Multi-Agent 系統中,如果前一個 Agent 輸出了一句「好的,這是您要的 JSON:」,然後才接著輸出資料結構,下一個負責執行的 Agent 或後端系統(呼叫 json.loads())就會瞬間崩潰。
Prompt Engineering 的盡頭,終究是 Software Engineering。面對這種問題,我們不能靠「跪求模型不要說廢話」,而是要用工程手段強制約束它。今天,我們來看看 Google ADK 如何優雅地解決這個痛點。
第一步:告別脆弱的 Prompt,擁抱 Pydantic 強型別
在 ADK 的設計哲學中,Agent 的輸出不該是一團未知的字串,而應該是具備強型別 (Strongly Typed) 的物件。我們可以透過 Python 業界標準的 Pydantic 來定義 RD Agent 必須遵守的產出規格。
這就像是為 Agent 戴上「緊箍咒」,連欄位名稱、資料型別,甚至是巢狀陣列,都受到嚴格限制。
from pydantic import BaseModel, Field
from typing import List
# 1. 嚴格定義 RD Agent 的產出規格
class APIEndpoint(BaseModel):
path: str = Field(description="API 路徑,例如 /api/v1/users")
method: str = Field(description="HTTP 方法,嚴格限制為 GET, POST, PUT, DELETE 之一")
description: str
class SystemArchitecture(BaseModel):
service_name: str
endpoints: List[APIEndpoint]
第二步:在 ADK Agent 中綁定 Response Schema
有了 Pydantic 模型後,我們不需要像使用底層 SDK 那樣去設定複雜的 GenerationConfig 或 MIME Type。在 Google ADK 中,你只需要在宣告 Agent 時,將定義好的 Schema 傳給 response_schema 參數。
ADK 會自動在底層切換 Gemini 的 JSON Mode,並將 Schema 轉換為 OpenAPI 規格傳遞給模型。
from google.adk import Agent
# 2. 初始化 RD Agent 並綁定強制輸出格式
rd_agent = Agent(
name="rd_agent",
model="gemini-2.5-pro", # 實作邏輯需要高階推理能力
instruction="你是一個資深後端 RD。請根據需求,設計乾淨、符合 RESTful 風格的 API 架構。",
response_schema=SystemArchitecture # 這是確保絕對精準的魔法
)
第三步:享受「絕對精準」的呼叫體驗
現在,我們的 Prompt 可以回歸本質,專注於「業務邏輯」,再也不用浪費 Token 去描述 JSON 格式了。最棒的是,ADK 回傳的結果已經被自動驗證並解析為 Python 物件!
# 3. 極簡的 Prompt,直接下達需求
prompt = "請幫我設計一個『活動報名系統』的用戶登入與活動報名模組。"
# 執行 Agent
response = rd_agent.invoke(prompt)
# 不用 json.loads(),不用 strip() 去除 Markdown!
# response 直接具備屬性存取能力 (強型別)
print(f"微服務名稱: {response.service_name}")
for ep in response.endpoints:
print(f"[{ep.method}] {ep.path} -> {ep.description}")
為什麼 ADK 的封裝如此關鍵? (Determinism in AI)
在企業級系統中,我們追求的是 確定性 (Determinism)。
透過 ADK 的 response_schema:
1 防禦幻覺:如果模型試圖回傳未定義的屬性,或者把 Array 寫成 String,底層 API 會直接在生成階段進行約束。
2 無縫串接:在 Multi-Agent 流程中,這個強型別的產出可以 100% 安全地作為參數,直接傳遞給下層的工具 (Tools) 或下一個 Agent。


小結
今天,我們利用 ADK 與 Pydantic,為 RD Agent 裝上了「絕對精準」的輸出限制,徹底消滅了 JSON 解析的惡夢。
現在,我們的 PM 和 RD Agent 已經能完美合作,產出精確無誤的架構與執行腳本。但如果這些腳本包含「直接對資料庫下達 UPDATE」或「發送正式 Email」的操作呢?我們能讓 Agent 全自動執行嗎?